package workflow

import "time"

// WorkflowData 代表完整的 workflow.json v2.0 数据结构
type WorkflowData struct {
	Meta           Meta         `json:"meta"`
	Proposal       Proposal     `json:"proposal"`
	Spec           Spec         `json:"spec"`
	Tasks          Tasks        `json:"tasks"`
	Evaluation     Evaluation   `json:"evaluation"`
	History        []History    `json:"history"`
	SchemaVersion  string       `json:"_schema_version"`
}

// Meta 元数据
type Meta struct {
	ChangeID      string    `json:"change_id"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
	Status        string    `json:"status"`         // in_progress, ready_to_execute, completed
	WorkflowStage string    `json:"workflow_stage"` // draft, ai_reviewing_stage1, ..., completed (v1.3新增)
	SessionID     string    `json:"session_id"`
	Round         int       `json:"round"`
	Complexity    string    `json:"complexity,omitempty"` // simple, medium, complex
}

// Proposal 需求背景
type Proposal struct {
	Summary    string        `json:"summary"`
	Motivation string        `json:"motivation"`
	Scope      ProposalScope `json:"scope"`
}

// ProposalScope 需求范围
type ProposalScope struct {
	ChangeType           string         `json:"change_type"`
	AffectedCapabilities []string       `json:"affected_capabilities"`
	AffectedFiles        []AffectedFile `json:"affected_files,omitempty"`
	MCPTools             []string       `json:"mcp_tools,omitempty"`
	BreakingChanges      bool           `json:"breaking_changes"`
	Priority             string         `json:"priority"`
	TargetUsers          string         `json:"target_users"`
	OutputFormat         string         `json:"output_format,omitempty"`
	KeyFeatures          []string       `json:"key_features"`
}

// AffectedFile 受影响的文件详细信息（对应 OpenSpec proposal.md 的 "Impact - Affected code"）
type AffectedFile struct {
	Path        string `json:"path"`                   // 文件路径 (e.g., "src/auth/middleware.ts")
	ChangeType  string `json:"change_type"`            // created, modified, deleted
	LineRange   string `json:"line_range,omitempty"`   // 行范围 (e.g., "15-20", "1-50")
	Description string `json:"description,omitempty"`  // 变更描述
}

// Spec 技术规范
type Spec struct {
	Requirements []Requirement `json:"requirements"`
}

// Requirement 单个需求
type Requirement struct {
	ID          string     `json:"id"`
	Operation   string     `json:"operation"` // ADDED, MODIFIED, REMOVED
	Name        string     `json:"name"`
	Description string     `json:"description"`
	Scenarios   []Scenario `json:"scenarios"`
}

// Scenario 验收场景
type Scenario struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	When string `json:"when"`
	Then string `json:"then"`
}

// Tasks 任务列表
type Tasks struct {
	Total     int    `json:"total"`
	Completed int    `json:"completed"`
	Items     []Task `json:"items"`
}

// Task 单个任务（v2.0 增强）
type Task struct {
	ID           string        `json:"id"`
	Number       string        `json:"number"`
	Name         string        `json:"name"`
	Description  string        `json:"description"`
	Status       string        `json:"status"` // pending, in_progress, completed
	Dependencies []string      `json:"dependencies"`
	Deliverables []Deliverable `json:"deliverables"` // v2.0 新增
	Verification Verification  `json:"verification"` // v2.0 新增
	Execution    Execution     `json:"execution"`    // v2.0 新增
}

// Deliverable 交付物定义（v2.0 新增）
type Deliverable struct {
	Type               string   `json:"type"` // file, documentation, code, test
	Path               string   `json:"path"`
	Description        string   `json:"description"`
	AcceptanceCriteria []string `json:"acceptance_criteria"`
}

// Verification 验证方式（v2.0 新增）
type Verification struct {
	Type         string   `json:"type"` // scenario, test, manual
	ScenarioRefs []string `json:"scenario_refs,omitempty"`
	ManualCheck  []string `json:"manual_check,omitempty"`
}

// Execution 执行信息（v2.0 新增）
type Execution struct {
	Status      string             `json:"status"` // not_started, in_progress, completed, failed
	StartedAt   *time.Time         `json:"started_at,omitempty"`
	CompletedAt *time.Time         `json:"completed_at,omitempty"`
	AIModel     string             `json:"ai_model,omitempty"`
	PromptUsed  string             `json:"prompt_used,omitempty"`
	Result      string             `json:"result,omitempty"`
	History     []ExecutionHistory `json:"history"`
}

// ExecutionHistory 执行历史记录
type ExecutionHistory struct {
	Timestamp time.Time `json:"timestamp"`
	Event     string    `json:"event"`
	From      string    `json:"from,omitempty"`
	To        string    `json:"to,omitempty"`
	Details   string    `json:"details"`
}

// Evaluation AI 自我评估结果
type Evaluation struct {
	TotalScore                    int      `json:"total_score"`
	BackgroundUnderstanding       int      `json:"background_understanding"`
	BackgroundReasoning           string   `json:"background_reasoning,omitempty"`
	BackgroundUnclear             []string `json:"background_unclear,omitempty"`
	TechnicalUnderstanding        int      `json:"technical_understanding"`
	TechnicalReasoning            string   `json:"technical_reasoning,omitempty"`
	TechnicalUnclear              []string `json:"technical_unclear,omitempty"`
	ImplementationUnderstanding   int      `json:"implementation_understanding"`
	ImplementationReasoning       string   `json:"implementation_reasoning,omitempty"`
	ImplementationUnclear         []string `json:"implementation_unclear,omitempty"`
	Completeness                  int      `json:"completeness"`
	ConfidenceLevel               string   `json:"confidence_level"` // 低, 中, 高
	MissingInfo                   []string `json:"missing_info,omitempty"`
	Contradictions                []string `json:"contradictions,omitempty"`
	Reasoning                     string   `json:"reasoning"`
}

// History 历史事件记录
type History struct {
	Timestamp time.Time `json:"timestamp"`
	Event     string    `json:"event"`
	Details   string    `json:"details"`
}

// RequirementIteration AI 补充迭代记录（v1.2新增）
type RequirementIteration struct {
	ID              int       `json:"id"`
	ProjectID       int       `json:"project_id"`
	Stage           string    `json:"stage"`            // stage1, stage2, stage3
	IterationNumber int       `json:"iteration_number"` // 该阶段的迭代次数
	UserFeedback    string    `json:"user_feedback"`    // 用户的自然语言反馈
	AIAdjustments   Adjustment `json:"ai_adjustments"`   // AI 理解的调整内容
	CreatedAt       time.Time `json:"created_at"`
	Status          string    `json:"status"` // pending, applied, rejected
}

// Adjustment AI 理解的字段调整
type Adjustment struct {
	Field     string `json:"field"`      // 要调整的字段名
	OldValue  string `json:"old_value"`  // 原值
	NewValue  string `json:"new_value"`  // 新值
	Reasoning string `json:"reasoning"`  // AI 的理解和推理
}

// ProjectInfo 项目信息（用于项目列表）
type ProjectInfo struct {
	ChangeID    string
	Name        string
	Status      string
	Path        string
	CreatedAt   time.Time
	LastUpdated time.Time
}
